package reflaction;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * @author cyt
 * @create 2020-04-20 8:54
 */
public class Test08 {

    /**
     * 获取类的全部属性
     *
     * @param args
     */

    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {
        // 先得到类得信息
        Class<?> name = Class.forName("reflaction.User");
        System.out.println(name);
        System.out.println("==============================");
        // 得到类的公有属性
        Field[] fields = name.getFields();
        for (Field field : fields) {
            System.out.println(field);
        }
        System.out.println("==============================");
        //得到全部的属性
        fields = name.getDeclaredFields();
        for (Field field : fields) {
            System.out.println(field);
        }
        System.out.println("==============================");
        // 得到类的共有方法
        Method[] methods = name.getMethods();
        for (Method method : methods) {
            System.out.println(method);
        }
        System.out.println("==============================");
        // 全部方法
        methods = name.getDeclaredMethods();
        for (Method method : methods) {
            System.out.println(method);
        }
        // 获得指定的方法, 为了避免重载， 需要添加额外的传参数， 区分
        System.out.println("================================");
        Method method = name.getMethod(String.valueOf(name), String.class);
        System.out.println(method);
        // 获取构造器, 方法同上
        Constructor<?>[] constructors = name.getConstructors();
        for (Constructor<?> constructor : constructors) {
            System.out.println(constructor);
        }
    }
}
